#include "Nave.h"
 
using namespace std;

//////////////////////////////////////////////////////////////////////////
/********************** METODOS PRIVADOS *******************************/

void Nave::printDados(){
  
    cout << "X: "  << getX() <<"\tY: " << getY()<< "\tAngulo: " << getAngulo()<<"\tRaio: "<< getRaio()<<endl ;
    cout << "Dir: "  << getDirecao() <<endl ;

}

//////////////////////////////////////////////////////////////////////////


Nave::Nave(){ 
  
    this->setVelocidade(0);
    this->setX(0.0);
    this->setY (0.0);
    this->setDirecao(RELEASE);
    this->setAngulo(0);
    this->setRaio(5);
    this->setAtivo(true);
}

Nave::Nave(float x, float y){ 
  
    this->setVelocidade(0);
    this->setX(x);
    this->setY(y);
    this->setDirecao(RELEASE);
    this->setAngulo(0);
    this->setRaio (5);
    this->setAtivo(true);
}

Nave::~Nave(){}


//////////////////////////////////////////////////////////////////////////
/********************** GETTERS E SETTERS *******************************/


void Nave::setDirecao (Direcao dir){
    this->direcao = dir;
}      

Direcao Nave::getDirecao(){
    return this->direcao;
}


//////////////////////////////////////////////////////////////////////////



void Nave::desenhar(){
    
    glPushMatrix();

    glTranslatef(getX(),getY(),0);
    glRotatef(getAngulo(),0,0,1); 
    
    //CORPO DA NAVE
    glScalef(0.5,1.3,0.5);
    glColor3f(0.5, 0.5, 0.5);
    glutSolidSphere(getRaio(), 30, 30);

    if(getDirecao()==FRENTE){
	
        //FOGO
	glColor3f(1.0, 1.0, 0.0);
	glPointSize(3);
	glBegin(GL_POINTS);
	  glVertex2f( 0, -5.5);
	glEnd();
    }
        
    //ASA DIREITA DA NAVE
    glColor3f(1.0, 1.0, 1.0);
    glBegin(GL_POLYGON);
      glVertex2f( (getRaio()/1.5), -(getRaio()/1.5));
      glVertex2f( getRaio(), 0.0f);
      glVertex2f( (getRaio()*2), -(getRaio()/1.5));
    glEnd(); 

    //ASA ESQUERDA DA NAVE
    glColor3f(1.0, 1.0, 1.0);
    glBegin(GL_POLYGON);
      glVertex2f( -(getRaio()/1.5), -(getRaio()/1.5));
      glVertex2f( -getRaio(), 0.0f);
      glVertex2f( -(getRaio()*2), -(getRaio()/1.5));
    glEnd();

    glPopMatrix();

}

void Nave::rotacionarEsquerda(){
            
     this->ajustarAngulo();         
     this->setAngulo(getAngulo() + 1);
}

void Nave::rotacionarDireita(){
     
     this->ajustarAngulo();
     this->setAngulo(getAngulo() - 1);
}

void Nave::acelerar(){

    
    if(getVelocidade()<1){
        setVelocidade(getVelocidade()+0.005);
    }
}

void Nave::desacelerar(){
    
    if(getVelocidade()>0.0){
       setVelocidade(getVelocidade()-0.002);
    }else if(getVelocidade()<0){
       setVelocidade(0.0);
    }
}

void Nave::mover(int height, int width){

	if ( getAngulo() < 0 ){
	  setAngulo(getAngulo() + (360.0));
	}
	
	setX(getX()+ getVelocidade()*getCosAnguloGraus());
	setY(getY()+ getVelocidade()*getSinAnguloGraus());

        //xNave
        if (getX() > width ){
            setX(-width);
        }
        if (getX() < -width ){
            setX(width);
        }
    
        //yNave
        if (getY() > height){
            setY(-height);
        }
        if (getY() < -height ){
            setY(height);
        }
        
}
